// 1-等于(=)
// 2-大于(>)
// 3-小于(<)
// 4-大于等于(>=)
// 5-小于等于(<=)
// 6-不等于(!=)
// 7-开区间(n,m)
// 8-闭区间[n,m]
// 9-半开区间[n,m)
// 10-半开区间(n,m]
// 11-区间外x∉[n,m]

function isWarn(warntype, warnvalue, formvalue = "") {
  let flag = false;

  // 若formvalue为对象类型，则不进行规则比较
  const formvalueType = typeof formvalue;
  let _formvalue = formvalue;
  if (["object"].includes(formvalueType)) {
    _formvalue = "";
  }

  switch (warntype) {
    case "1":
      const warnvalues1 = warnvalue ? warnvalue.split(",") : [];
      const formvalues2 = _formvalue ? _formvalue.split(",") : [];
      flag = !!formvalues2.find((ele) => warnvalues1.includes(ele));
      break;
    case "2":
      flag = _formvalue && Number(_formvalue) > Number(warnvalue);
      break;
    case "3":
      flag = _formvalue && Number(_formvalue) < Number(warnvalue);
      break;
    case "4":
      flag = _formvalue && Number(_formvalue) >= Number(warnvalue);
      break;
    case "5":
      flag = _formvalue && Number(_formvalue) <= Number(warnvalue);
      break;
    case "6":
      flag = warnvalue != _formvalue;
      break;
    case "7":
      const warnvalues7 = warnvalue ? warnvalue.split(",") : [];
      if (_formvalue && warnvalues7?.length == 2) {
        flag =
          Number(_formvalue) > Number(warnvalues7[0]) &&
          Number(_formvalue) < Number(warnvalues7[1]);
      }
      break;
    case "8":
      const warnvalues8 = warnvalue ? warnvalue.split(",") : [];
      if (_formvalue && warnvalues8?.length == 2) {
        flag =
          Number(_formvalue) >= Number(warnvalues8[0]) &&
          Number(_formvalue) <= Number(warnvalues8[1]);
      }
      break;
    case "9":
      const warnvalues9 = warnvalue ? warnvalue.split(",") : [];
      if (_formvalue && warnvalues9?.length == 2) {
        flag =
          Number(_formvalue) >= Number(warnvalues9[0]) &&
          Number(_formvalue) < Number(warnvalues9[1]);
      }
      break;
    case "10":
      const warnvalues10 = warnvalue ? warnvalue.split(",") : [];
      if (_formvalue && warnvalues10?.length == 2) {
        flag =
          Number(_formvalue) > Number(warnvalues10[0]) &&
          Number(_formvalue) <= Number(warnvalues10[1]);
      }
      break;
    case "11":
      const warnvalues11 = warnvalue ? warnvalue.split(",") : [];
      if (_formvalue && warnvalues11?.length == 2) {
        flag =
          Number(_formvalue) < Number(warnvalues11[0]) ||
          Number(_formvalue) > Number(warnvalues11[1]);
      }
      break;
    default:
      break;
  }
  return flag;
}

export { isWarn };
